AWS SDK for Python を使用してAmazon Connect インスタンス・ユーザ作成を少し楽にする
こんにちは、森田です。
Amazon Connect インスタンスを起動したいタイミングで Shell からできないかなと思い、調べてみたところプレビュー版APIがありましたので実際に試してみました。
実行環境
実行環境は以下となります。
Python 3.8.5 boto3 1.17.70
Connect インスタンスを作成
boto3の低レベルAPIでcreate_instanceを使用し、インスタンスの作成を行います。 使用したインスタンスの操作ができるようにインスタンスIDはテキストファイルに保存しておきます。
import boto3 import datetime client = boto3.client('connect') instance_alias = 'devio-sample' res = client.create_instance( IdentityManagementType='CONNECT_MANAGED', InstanceAlias=instance_alias, InboundCallsEnabled=True, OutboundCallsEnabled=True ) InstanceId = res["Id"] name = datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S') + 'instance_id.txt' with open(name, mode='w') as f: f.write(InstanceId) print(res)
{ "ResponseMetadata": { "RequestId": "xxxxxxxxx-yyyyyyyy-zzzzzzzz", "HTTPStatusCode": 200, "HTTPHeaders": { "date": "Wed, 06 Apr 2022 03:33:59 GMT", "content-type": "application/json", "content-length": "143", "connection": "keep-alive", "x-amzn-requestid": "xxxxxxxxx-yyyyyyyy-zzzzzzzz", "access-control-allow-origin": "*", "access-control-allow-headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token", "x-amz-apigw-id": "xxxxx", "access-control-allow-methods": "GET,OPTIONS,POST", "access-control-expose-headers": "x-amzn-RequestId,x-amzn-ErrorType", "x-amzn-trace-id": "xxxxxxxxx-yyyyyyyy-zzzzzzzz" }, "RetryAttempts": 0 }, "Id": "aaaa-bbbb-cccc", "Arn": "arn:aws:connect:ap-northeast-1:000000000000:instance/aaaa-bbbb-cccc" }
しばらく待つと、AWSコンソール上でインスタンスのステータスがActive
になります。
インスタンスの作成ができましたが、ユーザがないためEmergency accessのみとなってしまいます。
ユーザとしてアクセスできるように、管理者ユーザの作成を行います。
ユーザの作成
ユーザの作成には、RoutingProfileIdとSecurityProfileIdが必要ですので、それぞれの取得を行います。
取得後、それらをcreate_userの引数に指定し、ユーザの作成を行います。
import boto3 client = boto3.client('connect') with open('2022-04-07-115045instance_id.txt') as f: InstanceId = f.read() # RoutingProfileIdを取得する res = client.list_routing_profiles( InstanceId=InstanceId ) RoutingProfileId = res['RoutingProfileSummaryList'][0]['Id'] # SecurityProfileIdsを取得する res = client.list_security_profiles( InstanceId=InstanceId ) SecurityProfileAdminId = list(filter(lambda x: x['Name']=='Admin', res['SecurityProfileSummaryList']))[0]["Id"] user_name = 'boto3admin' passwd = 'Sample1234' f_n = 'chikara' l_n = 'morita' mail = '[email protected]' res = client.create_user( Username=user_name, Password=passwd, IdentityInfo={ 'FirstName': f_n, 'LastName': l_n, 'Email':mail }, PhoneConfig={ 'PhoneType': 'SOFT_PHONE' }, SecurityProfileIds=[ SecurityProfileAdminId, ], RoutingProfileId=RoutingProfileId, InstanceId=InstanceId ) print(res)
{ "ResponseMetadata": { "RequestId": "xxxx-yyyy-zzzz", "HTTPStatusCode": 200, "HTTPHeaders": { "date": "Thu, 07 Apr 2022 03:06:21 GMT", "content-type": "application/json", "content-length": "194", "connection": "keep-alive", "x-amzn-requestid": "xxxx-yyyy-zzzz", "access-control-allow-origin": "*", "access-control-allow-headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token", "x-amz-apigw-id": "xxxx-yyyy-zzzz", "access-control-allow-methods": "GET,OPTIONS,POST", "access-control-expose-headers": "x-amzn-RequestId,x-amzn-ErrorType", "x-amzn-trace-id": "xxxx-yyyy-zzzz" }, "RetryAttempts": 0 }, "UserId": "xxxx-yyyy-zzzz", "UserArn": "arn:aws:connect:ap-northeast-1:000000000000:instance/xxxx-yyyy-zzzz/agent/xxxx-yyyy-zzzz" }
ユーザ作成後は、ユーザ名・パスワードを使用してログインが可能となります。
Connect インスタンス・ユーザ作成をまとめて行う
先ほど使用したコードを1つのコードにまとめたものが以下となります。
このコードを使用することで、Connect インスタンス・ユーザ作成といった初回のセットアップをShellで完結することができます。
import argparse import time import boto3 client = boto3.client('connect') parser = argparse.ArgumentParser(description='Setup Amazon Connect Instance') parser.add_argument('instance_alias', type=str, help='New Instance Alias') parser.add_argument('user_name', type=str, help='New User Name') parser.add_argument('passwd', type=str, help='New User Password') parser.add_argument('f_n', type=str, help='New User first name') parser.add_argument('l_n', type=str, help='New User last name') parser.add_argument('mail', type=str, help='New User mail') args = parser.parse_args() res = client.create_instance( IdentityManagementType='CONNECT_MANAGED', InstanceAlias=args.instance_alias, InboundCallsEnabled=True, OutboundCallsEnabled=True ) assert res['ResponseMetadata']['HTTPStatusCode'] == 200, 'Connect インスタンスが正常に作成できませんでした' InstanceId = res["Id"] # インスタンスがACTIVEになるまで待つ status = '' while status != 'ACTIVE': time.sleep(5) res= client.describe_instance( InstanceId=InstanceId ) status = res['Instance'] ['InstanceStatus'] # RoutingProfileIdを取得する res = client.list_routing_profiles( InstanceId=InstanceId ) RoutingProfileId = res['RoutingProfileSummaryList'][0]['Id'] # SecurityProfileIdsを取得する res = client.list_security_profiles( InstanceId=InstanceId ) SecurityProfileAdminId = list(filter(lambda x: x['Name']=='Admin', res['SecurityProfileSummaryList']))[0]['Id'] res = client.create_user( Username=args.user_name, Password=args.passwd, IdentityInfo={ 'FirstName': args.f_n, 'LastName': args.l_n, 'Email': args.mail }, PhoneConfig={ 'PhoneType': 'SOFT_PHONE' }, SecurityProfileIds=[ SecurityProfileAdminId, ], RoutingProfileId=RoutingProfileId, InstanceId=InstanceId ) assert res['ResponseMetadata']['HTTPStatusCode'] == 200, 'Connect ユーザが正常に作成できませんでした' print('Amazon Connect Setup Done!!') print('https://{}.my.connect.aws'.format(args.instance_alias))
実行時の引数に
Connect インスタンスのエイリアス、作成するユーザのユーザ名・パスワード・姓・名・メールアドレス
を指定します。
$ python connect_run.py devio-sample morita Sample12345 chikara morita [email protected]
Amazon Connect Setup Done!! https://devio-sample.my.connect.aws
正常に実行されると、Amazon Connect Setup Done!!
が表示されます。
また、実際に表示されたリンクより作成したユーザでログインすることも可能です。
最後に
本記事では、AWS SDK for Python を使用して Amazon Connectインスタンス・ユーザの作成をまとめて行う方法についてご紹介しました。
Amazon Connectインスタンス・ユーザの作成は、CLIでも可能ですので、気になる方は以下をご参照ください。